package com.ruoyi.ade.tool;

import com.alibaba.fastjson2.JSONArray;
import com.ruoyi.ade.domain.Standard;
import com.ruoyi.ade.llm.model.Ade;

import java.util.ArrayList;
import java.util.List;

/**
 *   ADE格式验证与处理工具
 */
public class AdeJsonFormatUtils {

    /**
     * 验证ADE格式
     * @param ades
     * @return
     */
    public static boolean isvalidate(List<Ade> ades) {
        for (Ade ade : ades) {
            if(isEmpty(ade )) return false;  //如果数组中有 空ADE 则不合规   [{}]
            if(!isvalidate(ade)) return false;
        }
        return true;
    }

    public static boolean isEmpty(Ade ade){
        if(ade.getDrugs()==null&&ade.getSentence()==null&&ade.getReactions()==null) return true;
        return false;
    }

    /**
     * 验证ADE格式的合规性
     * @param ade
     * @return
     */
    public static boolean isvalidate(Ade ade) {
        if(isEmpty(ade)) return true;
        if (ade.getReactions() == null || ade.getReactions().size() == 0) return false;
        if(ade.getReactions().size()==1 && "".equals(ade.getReactions().get(0))) return false;
        if (ade.getSentence() == null || "".equals(ade.getSentence())) return false;
        if (ade.getDrugs() == null) return false;

        //判断药物实体，不良反应实体中是否有逗号， 有则表示没有合规处理，需要将逗号拆分开来
        boolean haveCom = false;
        for (String drug : ade.getDrugs()) {
            if (drug.contains(",") || drug.contains("，")) haveCom = true;
        }
        for (String reaction : ade.getReactions()) {
            if (reaction.contains(",") || reaction.contains("，")) haveCom = true;
        }
        if(haveCom) return false;
        return true;
    }

    /**
     * 对ADE中drugs字段进行格式化，如果只有一个元素且为空或者"药物"，则将其置空
     * @param ade
     * @return   true:表示对药物实体做了处理   false:表示没有做任何处理
     */
    public static boolean formatDrugs(Ade ade) {
        if(ade != null && ade.getDrugs() != null) {

            //对药物字符串，以及无效的“药物”字符串统一处理
            if (ade.getDrugs().size() == 1) {
                 if("".equals(ade.getDrugs().get(0)) || "药物".equals(ade.getDrugs().get(0))|| "未知药物".equals(ade.getDrugs().get(0))){
                     ade.setDrugs(new ArrayList<>());
                     return true;
                 }
            }

            //对化疗药物名称 统一规范化处理
            boolean hualiao = false;
            for(int i=0;i<ade.getDrugs().size();i++){
                if (ade.getDrugs().get(i).contains("化疗")) {
                    ade.getDrugs().set(i, "化疗药");
                    hualiao = true;
                }
            }
            if(hualiao){
                return true;
            }
        }
        return false;
    }

}
